package main

import (
	"fmt"
	"os"
)

func main() {
	// 条件控制
	if true {

 	} else {

	}

	// 常见的写法
	// 打开某一个文件
	if fileHander, error := os.Open("hello world"); error != nil {
		fmt.Println(fileHander)
		fmt.Println(error.Error())
	} else {
		fmt.Println("打开文件成功")
	}

	// switch case
	switch exam := 100; {
	case exam < 60:
		fmt.Println("成绩不合格")
	case exam > 80:
		fmt.Println("优秀")
	}

	// go语言 函数支持多返回
	//func 函数名 (返回值) {
	//
	//}
	
	var sum int
	var minus int

	sum, minus = actionVarabile(1, 3)
	fmt.Println(sum)
	fmt.Println(minus)

	// 递归函数

	// 匿名函数 闭包
	// 匿名函数 使用方式1: 定义一个匿名函数并调用
	sumVarabile := func (var1, var2 int) (int) {
		return var1 + var2
	}(1,3)
	fmt.Println(sumVarabile)
	// 匿名函数使用方式2:

	func1 := func (var1, var2 int) (int) {
		return var1 + var2
	}
	fmt.Printf("func1调用的值为:%d", func1(1,2))

	// 闭包 函数+函数对外部的引用 组成的一个整体
	// https://blog.csdn.net/qq_35976351/article/details/81986496
	
	in := increase()
	fmt.Println(in())
	fmt.Println(in())
}
func increase() func() int {
	n := 0
	return func() int {
		n++
		return n
	}
}

//func actionVarabile(var1 int, var2 int) (int, int)  {
//	return var1 + var2, var1 - var2
//}

func actionVarabile(var1, var2 int) (int, int)  {
	return var1 + var2, var1 - var2
}

func actionVarabile2(var1, var2 int) (sum int, minus int)  {
	sum = var1 + var2
	minus = var1 - var2
	return sum, minus
}

// 不定参数
func actionVarables(arg ... interface{}) {
	for _, value := range arg {
		switch value.(type) {
		case int:
			fmt.Println("类型是int", value)
		case string:
			fmt.Println("string", value)
		}
	}
}